home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
ada
/
gwuada_5.zip
/
adaed
/
nyudemos
/
screenio.ada
< prev
next >
Wrap
Text File
|
1992-09-01
|
3KB
|
126 lines
----------------------------------------------------------------------
--
-- Screen Input Output Package
--
-- written by
--
-- Edmond Schonberg
-- David Shields
--
-- Ada Project
-- Courant Institute
-- New York University
-- 251 Mercer Street
-- New York, New York 10012
--
-----------------------------------------------------------------------
with text_io; use text_io;
with semaphore; use semaphore;
package screen_io is
-- These screen input output primitives assume that the terminal can
-- function as a VT100 or, for the IBM PC, has ANSI.SYS installed
-- as a screen driver.
subtype row is integer range 1..25;
subtype column is integer range 1..80;
procedure clear ;
procedure PUTS(s: string; r: row; c: column);
procedure PUTSN(s: string; n: integer; r: row; c: column);
procedure PUTC(ch: character; r: row; c: column);
procedure PUTCB(ch: character; r: row; c: column);
procedure fill_screen(c: character) ;
end screen_io;
with integer_text_io; use integer_text_io;
package body screen_io is
protect: ACCESS_BINARY_SEMAPHORE := new BINARY_SEMAPHORE;
procedure clear is
begin
put(ASCII.ESC ); put("[2J") ;
end ;
procedure PUT_INT(R: integer) is
digs: constant string := "0123456789";
d : integer := R;
begin
if d>=100 then
put(digs(d/100 + 1));
d := d mod 100;
end if;
-- always write at least two digits (if setting screen position).
put(digs(d/10 + 1));
put(digs(d mod 10 + 1));
end;
procedure SET_CURSOR(R: row := 1; C:column := 1) is
-- uses escape sequence ESC [ row ; column H
begin
put(ASCII.ESC);
put('[');
put_int(R);
put( ';');
put_int(C);
put('H');
end SET_CURSOR;
procedure PUTS(S: string; R: row; C: column) is
index: integer;
begin
PROTECT.P;
SET_CURSOR(R, C); put_line(S);
PROTECT.V;
end;
procedure PUTSN(S: string; N: integer; R: row; C: column) is
index: integer;
-- put string and integer values
begin
PROTECT.P;
SET_CURSOR(R, C); put(S);
put_int(N);
put_line(" ");
PROTECT.V;
end;
procedure PUTCB(CH: character ; R: row; C: column) is
-- put "emphasized" character
index: integer;
begin
PROTECT.P;
SET_CURSOR(R, C);
put(ASCII.ESC);
put("[5m"); -- turn on blinking
put(CH);
put(ASCII.ESC);
put_line("[0m"); -- turn off blinking
PROTECT.V;
end;
procedure PUTC(Ch: character; R: row; C: column) is
begin
PROTECT.P;
SET_CURSOR(R, C);
put(Ch);
new_line;
PROTECT.V;
end PUTC;
procedure fill_screen(c: character) is
line : string(1..80) := (1..80 => c) ;
begin
for i in 2..23 loop
SET_CURSOR(i, 1); put_line(line) ;
end loop;
end fill_screen;
end screen_io;